﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using BLL.Validation;
using Entities;
using DAL.IRepository;

namespace BLL
{

    public class QuanLyKeHoachGiangDayManager : IValidator<QuanLyKeHoachGiangDay>
    {
        private readonly IGeneralRepository<QuanLyKeHoachGiangDay> _repository;

        public QuanLyKeHoachGiangDayManager(IGeneralRepository<QuanLyKeHoachGiangDay> itr)
        {
            _repository = itr;
        }

        public ValidationResult Validate(QuanLyKeHoachGiangDay QuanLyKHGD)
        {
            var vResult = new ValidationResult();

            if (string.IsNullOrEmpty(QuanLyKHGD.MaQL.Trim()))
                vResult.Messages.Add("Mã quản lý  phải khác chuỗi rỗng");
            if (string.IsNullOrEmpty(QuanLyKHGD.NamHoc.Trim()))
                vResult.Messages.Add("Năm học  phải khác chuỗi rỗng");
          

            if (Convert.ToInt32(QuanLyKHGD.HocKi) <0 || Convert.ToInt32(QuanLyKHGD.HocKi) >3)
                vResult.Messages.Add("Hoc ki la 1, 2 hoặc 3");

            return vResult;
        }

        public ActionResult InsertOrUpdate(QuanLyKeHoachGiangDay QuanLyKHGD)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.InsertOrUpdate(QuanLyKHGD))
                    aResult.Exceptions.Add(new Exception("Thêm kế hoạch học không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(QuanLyKeHoachGiangDay QuanLyKHGD)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(QuanLyKHGD))
                    aResult.Exceptions.Add(new Exception("Xóa thông tin kế hoạch giảng dạy không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(string quanlyID)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(t => t.MaQL == quanlyID))
                    aResult.Exceptions.Add(new Exception("Xóa thông tin  kế hoạch không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResultAsList<QuanLyKeHoachGiangDay> Find(Expression<Func<QuanLyKeHoachGiangDay, bool>> predicate)
        {
            var aResult = new ActionResultAsList<QuanLyKeHoachGiangDay>();
            try
            {
                aResult.Result = _repository.Find(predicate).ToList();
                if (aResult.Result.Count == 0)
                    aResult.Exceptions.Add(new Exception("Không tìm thấy môn học thỏa điều kiện"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

    }
}
